<?php

/**
 * Description of VirtualLabs_Admin_PerfilEncendido
 *
 * @author markos
 */
class VirtualLabs_Admin_GrupoPerfil extends VirtualLabs_Admin_Dao {

    const TABLE_NAME = 'grupo_perfil_vm';
    const GRUPO_ASIGNABLE = 1;
    const GRUPO_NOASIGNABLE = 0;

    public function getCantidadVmByCodigoLaboratorio($codigoLaboratorio) {
        $db = Zend_Db_Table::getDefaultAdapter();
        $debug = Zend_Registry::get(VirtualLabs_Common::DEBUG_LOG);
        $debug->debug($select);
        $select = $db->select()->from(array('gpvm' => "grupo_perfil_vm"), array("cantidad" => "cantidad", "codigo"=>"codigo_grupo_perfil_vm"));
        $select->where("gpvm.codigo_laboratorio = ?", $codigoLaboratorio);
$debug->debug($select);
        try {
            $result = $db->fetchAll($select);
            $count = 0;
            foreach ($result as $key => $value) {
                $debug->debug("value : " . print_r($value, true));
                $selectPerfilCount = $db->select()->from(array('pvm' => "perfil_vm"), array("cantidad_perfiles" => "count(*)"))
                    ->where("codigo_grupo_perfil_vm = ?", $value['codigo']);
                    $debug->debug($selectPerfilCount);
                    $r = $db->fetchRow($selectPerfilCount);
                    $count += $r['cantidad_perfiles'] * $value['cantidad'];
                    $debug->debug("$count");
            }
            
            return $count;
        } catch (Exception $e) {
            $logger = Zend_Registry::get(VirtualLabs_Exception::ERROR_LOG);
            $logger->debug($e->getMessage());
            $logger->debug($e->getTraceAsString());
            throw $e;
        }
    }

    public function existeAsignado($codigoLaboratorio) {
        $db = Zend_Db_Table::getDefaultAdapter();
        $select = $db->select()->from("grupo_perfil_vm");
        $select->where("codigo_laboratorio = ?", $codigoLaboratorio);
        $select->where("asignable = ?", VirtualLabs_Common::GRUPO_PERFIL_ASIGNABLE);

        $debug = Zend_Registry::get(VirtualLabs_Common::DEBUG_LOG);
        $debug->debug($select);
        try {
            return $db->fetchRow($select);
        } catch (Exception $e) {
            $logger = Zend_Registry::get(VirtualLabs_Exception::ERROR_LOG);
            $logger->debug($e->getMessage());
            $logger->debug($e->getTraceAsString());
            throw $e;
        }
    }

    /**
     * Recuperar los datos de perfil de encendido de una maquina virtual.
     *  
     * @param array $fields campos a recuperar
     * @param array $where array de condiciones
     * @return type
     * @throws Exception
     */
    public function getGrupoPerfil($fields = array(), $where = array()) {
        $db = Zend_Db_Table::getDefaultAdapter();
        $select = $db->select()->from("grupo_perfil_vm", $fields);
        foreach ($where as $key => $value) {
            $select->where("$key {$value['criteria']} ?", $value['value']);
        }
        $debug = Zend_Registry::get(VirtualLabs_Common::DEBUG_LOG);
        $debug->debug($select);
        try {
            return $db->fetchAll($select);
        } catch (Exception $e) {
            $logger = Zend_Registry::get(VirtualLabs_Exception::ERROR_LOG);
            $logger->debug($e->getMessage());
            $logger->debug($e->getTraceAsString());
            throw $e;
        }
    }

    public function getGrupoPerfilByCodigoLaboratorio($codigoLaboratorio) {
        $db = Zend_Db_Table::getDefaultAdapter();
        $select = $db->select()->from("grupo_perfil_vm");

        $select->where("codigo_laboratorio = ?", $codigoLaboratorio);

        $debug = Zend_Registry::get(VirtualLabs_Common::DEBUG_LOG);
        $debug->debug($select);
        try {
            return $db->fetchAll($select);
        } catch (Exception $e) {
            $logger = Zend_Registry::get(VirtualLabs_Exception::ERROR_LOG);
            $logger->debug($e->getMessage());
            $logger->debug($e->getTraceAsString());
            throw $e;
        }
    }
    
    public function getGrupoPerfilByCodigoLabAsig($codigoLaboratorio, $asignable) {
        $db = Zend_Db_Table::getDefaultAdapter();
        $select = $db->select()->from("grupo_perfil_vm");
        $select->where("codigo_laboratorio = ?", $codigoLaboratorio)
        ->where("asignable = ?", $asignable);        
        try {
            return $db->fetchAll($select);
        } catch (Exception $e) {
            $logger = Zend_Registry::get(VirtualLabs_Exception::ERROR_LOG);
            $logger->debug($e->getMessage());
            $logger->debug($e->getTraceAsString());
            throw $e;
        }
    }

    public function getPerfiles($codigoGrupo) {
        $db = Zend_Db_Table::getDefaultAdapter();
        $select = $db->select()->from("perfil_vm");
        $select->where("codigo_grupo_perfil_vm = ?", $codigoGrupo);
        
        try {
            return $db->fetchAll($select);
        } catch (Exception $e) {
            $logger = Zend_Registry::get(VirtualLabs_Exception::ERROR_LOG);
            $logger->debug($e->getMessage());
            $logger->debug($e->getTraceAsString());
            throw $e;
        }
    }

    /**
     * Guarda el perfil de una maquina virtual en base de datos.
     * En caso $codigoPerfilVm este seteado se realiza un update utilizando 
     * este valor como condicion de busqueda, caso contrario realiza 
     * un insert en la base de datos.
     *  
     * @param array $data datos del perfil 
     * @param int $codigoPerfilVm codigo de perfil para update
     * @return type
     * @throws Exception
     */
    public function savePerfil($data, $codigoPerfilVm = null) {
        $db = Zend_Db_Table::getDefaultAdapter();
        try {
            if (!is_null($codigoPerfilVm)) {
                $db->update("perfil_vm", $data, "codigo_perfil_vm = $codigoPerfilVm");
                $data['codigo_perfil_vm'] = $codigoPerfilVm;
            } else {
                $db->insert("perfil_vm", $data);
                $data['codigo_perfil_vm'] = $db->lastInsertId("codigo_perfil_vm");
            }
            return $data;
        } catch (Exception $e) {
            $logger = Zend_Registry::get(VirtualLabs_Exception::ERROR_LOG);
            $logger->debug($e->getMessage());
            $logger->debug($e->getTraceAsString());
            throw $e;
        }
    }

    /**
     * Obtiene Datos de la tabla perfil_vm
     * @param type $fields
     * @param type $where
     * @return type
     * @throws Exception
     */
    public function getPerfiles2($fields = array(), $where = array()) {
        $db = Zend_Db_Table::getDefaultAdapter();
        $select = $db->select()->from("perfil_vm", $fields);
        foreach ($where as $key => $value) {
            $select->where("$key {$value['criteria']} ?", $value['value']);
        }        
        try {
            return $db->fetchAll($select);
        } catch (Exception $e) {
            $logger = Zend_Registry::get(VirtualLabs_Exception::ERROR_LOG);
            $logger->debug($e->getMessage());
            $logger->debug($e->getTraceAsString());
            throw $e;
        }
    }

    public function getPerfilesByCodLaboratorio($codLaboratorio, $asignable = 0) {
        $debugLog = Zend_Registry::get(VirtualLabs_Common::DEBUG_LOG);
        try {
            $db = Zend_Db_Table::getDefaultAdapter();
            $select = $db->select()->from(array('pv' => 'perfil_vm', array('codigo_perfil_vm')))
                    ->join(array('gp' => 'grupo_perfil_vm'), 'pv.codigo_grupo_perfil_vm = gp.codigo_grupo_perfil_vm', array())
                    ->join(array('la' => 'laboratorio'), 'la.codigo_laboratorio = gp.codigo_laboratorio ', array())
                    ->where("la.codigo_laboratorio = ?", $codLaboratorio)
                    ->where("gp.asignable = ?", $asignable);

            $debugLog->debug("este es mi select: " . $select);
            return $db->fetchAll($select);
        } catch (Exception $e) {
            $logger = Zend_Registry::get(VirtualLabs_Exception::ERROR_LOG);
            $logger->debug($e->getMessage());
            $logger->debug($e->getTraceAsString());
            throw $e;
        }
    }

}

?>
